package middle;

import java.util.Scanner;

/**
 * JD9 幸运数
 * @author d3y1
 */
public class JD9{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);

        while(in.hasNext()){
            solution1(in);
            solution2(in);
            solution3(in);
        }
    }

    /**
     * 模拟法: 字符串转字符
     * @param in
     */
    private static void solution1(Scanner in){
        int n = in.nextInt();

        int result = 0;
        for(int i=1; i<=n; i++){
            if(f(i) == g(i)){
                result++;
            }
        }

        System.out.println(result);
    }

    /**
     * 模拟法: 数学运算
     * @param in
     */
    private static void solution2(Scanner in){
        int n = in.nextInt();

        int result = 0;
        for(int i=1; i<=n; i++){
            if(F(i) == G(i)){
                result++;
            }
        }

        System.out.println(result);
    }

    /**
     * 模拟法: 数学运算(位运算)
     * @param in
     */
    private static void solution3(Scanner in){
        int n = in.nextInt();

        int result = 0;
        for(int i=1; i<=n; i++){
            if(F(i) == G_(i)){
                result++;
            }
        }

        System.out.println(result);
    }

    /**
     * 十进制数字之和: 字符串转字符
     * @param x
     * @return
     */
    private static int f(int x){
        int sum = 0;
        char[] digits = String.valueOf(x).toCharArray();
        for(char digit: digits){
            sum += digit-'0';
        }

        return sum;
    }

    /**
     * 十进制数字之和: 数学运算
     * @param x
     * @return
     */
    private static int F(int x){
        int sum = 0;
        while(x > 0){
            sum += x%10;
            x /= 10;
        }

        return sum;
    }

    /**
     * 二进制数字之和: 字符串转字符
     * @param x
     * @return
     */
    private static int g(int x){
        int sum = 0;
        char[] digits = Integer.toBinaryString(x).toCharArray();
        for(char digit: digits){
            sum += digit-'0';
        }

        return sum;
    }

    /**
     * 二进制数字之和: 数学运算
     * @param x
     * @return
     */
    private static int G(int x){
        int sum = 0;
        while(x > 0){
            sum += x%2;
            x /= 2;
        }

        return sum;
    }

    /**
     * 二进制数字之和: 数学运算(位运算)
     * @param x
     * @return
     */
    private static int G_(int x){
        int sum = 0;
        while(x > 0){
            sum += x&1;
            x >>= 1;
        }

        return sum;
    }
}